package util.expression;

/**
 * 일반항을 표현하는 클래스
 */
public class GeneralTerm extends Term
{
	private double coefficient; // 계수
	private double degree;      // 차수
	private Function function;  // 자신이 가지고 있는 함수

	/**
	 * 생성자
	 * @param coefficient : 계수
	 * @param degree      : 차수
	 */
	public GeneralTerm(double coefficient, double degree)
	{
		this.coefficient = coefficient;
		this.degree = degree;
	}

	/**
	 * 생성자
	 * @param coefficient : 계수
	 * @param degree      : 차수
	 * @param function    : 자신이 가지고 있는 함수
	 */
	public GeneralTerm(double coefficient, double degree, Function function)
	{
		this.coefficient = coefficient;
		this.degree = degree;
		this.function = function;
	}

	/**
	 * 항에 값을 대입하여 결과값을 얻는 메서드
	 * @param x : 항에 대입할 값
	 * @return : 결과값
	 */
	@Override
	public double getValue(double x)
	{
		if (function != null)
			return coefficient * Math.pow(function.getValue(x), degree);
		else
			return coefficient * Math.pow(x, degree);
	}
}